# -*- coding:utf-8 -*-
# @FileName : app\utils\file_handler.py
# @Time     : 2025/11/28
# @Author   : 天空之城
"""
文件处理工具模块
提供截图文件的保存和管理功能
"""
#!/usr/bin/env python3
# -*- coding: utf-8 -*-



import base64
import os
from datetime import datetime
from typing import Optional

from app.config import logger


def save_screenshot_from_base64(base64_data: str, task_id: Optional[str] = None) -> str:
    """
    将Base64编码的截图数据保存到文件，并返回相对URL路径
    
    Args:
        base64_data (str): Base64编码的图片数据
        task_id (Optional[str]): 任务ID，用于生成唯一文件名
        
    Returns:
        str: 保存文件的相对URL路径
        
    Raises:
        ValueError: 当Base64数据无效时抛出
        IOError: 当文件保存失败时抛出
    """
    try:
        # 移除可能存在的数据URI前缀 (如: data:image/png;base64,)
        if base64_data.startswith('data:image'):
            base64_data = base64_data.split(',', 1)[1]
        
        # 解码Base64数据
        image_data = base64.b64decode(base64_data)
        
        # 生成文件名
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        if task_id:
            filename = f"screenshot_{task_id}_{timestamp}.png"
        else:
            filename = f"screenshot_{timestamp}.png"
        
        # 构建保存路径
        date_dir = datetime.now().strftime("%Y-%m-%d")
        screenshots_dir = os.path.join("app", "static", "screenshots", date_dir)
        
        # 确保目录存在
        os.makedirs(screenshots_dir, exist_ok=True)
        
        # 完整文件路径
        file_path = os.path.join(screenshots_dir, filename)
        
        # 保存文件
        with open(file_path, "wb") as f:
            f.write(image_data)
        
        # 返回相对URL路径
        relative_url = f"/static/screenshots/{date_dir}/{filename}"
        logger.info(f"截图已保存: {relative_url}")
        
        return relative_url
        
    except Exception as e:
        logger.error(f"保存截图失败: {str(e)}")
        raise IOError(f"保存截图失败: {str(e)}")


def get_screenshots_dir() -> str:
    """
    获取截图保存目录路径
    
    Returns:
        str: 截图保存目录的绝对路径
    """
    date_dir = datetime.now().strftime("%Y-%m-%d")
    screenshots_dir = os.path.join("app", "static", "screenshots", date_dir)
    os.makedirs(screenshots_dir, exist_ok=True)
    return screenshots_dir